↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PrologToPiTRSProof
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_AG(X, XS, YS, flat_in_ag(ZS, YS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_AG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GG(X, XS, YS, flat_in_ag(ZS, YS))
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_AG(X, XS, YS, flat_in_ag(ZS, YS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_AG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GG(X, XS, YS, flat_in_ag(ZS, YS))
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PrologToPiTRSProof
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PrologToPiTRSProof
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ PrologToPiTRSProof
U1_GG(YS, right_out_ga) → FLAT_IN_AG(YS)
U1_AG(YS, right_out_ga) → FLAT_IN_AG(YS)
FLAT_IN_AG(cons(X, YS)) → U1_AG(YS, right_in_ga(tree))
FLAT_IN_AG(ZS) → FLAT_IN_GG(tree, ZS)
FLAT_IN_GG(tree, cons(X, YS)) → U1_GG(YS, right_in_ga(tree))
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga
right_in_ga(x0)
No rules are removed from R.
U1_AG(YS, right_out_ga) → FLAT_IN_AG(YS)
FLAT_IN_AG(cons(X, YS)) → U1_AG(YS, right_in_ga(tree))
FLAT_IN_AG(ZS) → FLAT_IN_GG(tree, ZS)
FLAT_IN_GG(tree, cons(X, YS)) → U1_GG(YS, right_in_ga(tree))
POL(FLAT_IN_AG(x1)) = 1 + 2·x1
POL(FLAT_IN_GG(x1, x2)) = 2·x1 + 2·x2
POL(U1_AG(x1, x2)) = 2 + 2·x1 + 2·x2
POL(U1_GG(x1, x2)) = 1 + 2·x1 + 2·x2
POL(cons(x1, x2)) = 2 + x1 + x2
POL(right_in_ga(x1)) = 2·x1
POL(right_out_ga) = 0
POL(tree) = 0
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ PrologToPiTRSProof
U1_GG(YS, right_out_ga) → FLAT_IN_AG(YS)
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ PrologToPiTRSProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ PrologToPiTRSProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(x0)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ ATransformationProof
↳ PrologToPiTRSProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ ATransformationProof
↳ QDP
↳ NonTerminationProof
↳ PrologToPiTRSProof
tree(ZS) → tree(ZS)
tree(ZS) → tree(ZS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_AG(X, XS, YS, flat_in_ag(ZS, YS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_AG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GG(X, XS, YS, flat_in_ag(ZS, YS))
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_AG(X, XS, YS, flat_in_ag(ZS, YS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_AG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GG(X, XS, YS, flat_in_ag(ZS, YS))
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GG(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
flat_in_ag(niltree, nil) → flat_out_ag(niltree, nil)
flat_in_ag(tree(X, niltree, XS), cons(X, YS)) → U1_ag(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ag(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ag(X, XS, YS, flat_in_ag(ZS, YS))
flat_in_ag(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ag(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
flat_in_gg(niltree, nil) → flat_out_gg(niltree, nil)
flat_in_gg(tree(X, niltree, XS), cons(X, YS)) → U1_gg(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_gg(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_gg(X, XS, YS, flat_in_ag(ZS, YS))
U2_gg(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_gg(tree(X, niltree, XS), cons(X, YS))
flat_in_gg(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_gg(X, Y, YS1, YS2, XS, ZS, flat_in_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_gg(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_gg(tree(X, tree(Y, YS1, YS2), XS), ZS)
U3_ag(X, Y, YS1, YS2, XS, ZS, flat_out_gg(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ag(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ag(X, XS, YS, flat_out_ag(ZS, YS)) → flat_out_ag(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
FLAT_IN_GG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GG(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_AG(tree(X, niltree, XS), cons(X, YS)) → U1_AG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GG(tree(X, niltree, XS), cons(X, YS)) → U1_GG(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
U1_AG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
U1_GG(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_AG(ZS, YS)
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
FLAT_IN_AG(cons(X, YS)) → U1_AG(X, YS, right_in_ga(tree))
FLAT_IN_AG(ZS) → FLAT_IN_GG(tree, ZS)
U1_GG(X, YS, right_out_ga(tree)) → FLAT_IN_AG(YS)
FLAT_IN_GG(tree, cons(X, YS)) → U1_GG(X, YS, right_in_ga(tree))
U1_AG(X, YS, right_out_ga(tree)) → FLAT_IN_AG(YS)
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga(tree)
right_in_ga(x0)
No rules are removed from R.
FLAT_IN_AG(cons(X, YS)) → U1_AG(X, YS, right_in_ga(tree))
U1_GG(X, YS, right_out_ga(tree)) → FLAT_IN_AG(YS)
FLAT_IN_GG(tree, cons(X, YS)) → U1_GG(X, YS, right_in_ga(tree))
U1_AG(X, YS, right_out_ga(tree)) → FLAT_IN_AG(YS)
POL(FLAT_IN_AG(x1)) = 2 + x1
POL(FLAT_IN_GG(x1, x2)) = 2 + 2·x1 + x2
POL(U1_AG(x1, x2, x3)) = x1 + 2·x2 + 2·x3
POL(U1_GG(x1, x2, x3)) = 1 + x1 + x2 + x3
POL(cons(x1, x2)) = 2 + 2·x1 + 2·x2
POL(right_in_ga(x1)) = 2 + x1
POL(right_out_ga(x1)) = 2 + 2·x1
POL(tree) = 0
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
FLAT_IN_AG(ZS) → FLAT_IN_GG(tree, ZS)
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga(tree)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(tree) → right_out_ga(tree)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
right_in_ga(x0)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ ATransformationProof
FLAT_IN_GG(tree, ZS) → FLAT_IN_GG(tree, ZS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ ATransformationProof
↳ QDP
↳ NonTerminationProof
tree(ZS) → tree(ZS)
tree(ZS) → tree(ZS)